#pragma once

#include "Log.h"
#include "Ettin/Events/Event.h"


namespace Ettin {
	struct WindowProps
	{
		std::string Title;
		uint32_t Width;
		uint32_t Height;

		WindowProps(
			const std::string& title = "Ettin engine",
			uint32_t width = 1280,
			uint32_t height = 720)
			:Title(title), Width(width), Height(height)
		{ }
	};

	class Window
	{
	public:
		using EventCallbackFn = std::function<void(Event&)> ;

		virtual	~Window() = default;

		virtual void OnUpdate() = 0;

		virtual unsigned int GetWidth() const = 0;
		virtual unsigned int GetHeight() const = 0;

		// Window attributes
		virtual void SetEventCallback(const EventCallbackFn& callback) = 0;
		virtual void SetVSync(bool enabled) = 0;
		virtual bool IsVSync() const = 0;

		virtual void* GetNativeWindow() const = 0;
		//static Scope<Window> Create(const WindowProps& props = WindowProps());
		static Window* Create(const WindowProps& props = WindowProps());
	};
}
